package imai78gae.heya.action;

import imai78gae.heya.HeyaConstants;
import imai78gae.heya.model.UserInfo;

import javax.servlet.http.HttpServletRequest;

import org.seasar.cubby.action.Accept;
import org.seasar.cubby.action.ActionClass;
import org.seasar.cubby.action.ActionResult;
import org.seasar.cubby.action.FlashMap;
import org.seasar.cubby.action.Forward;
import org.seasar.cubby.action.Redirect;
import org.seasar.cubby.action.RequestMethod;

import com.google.inject.Inject;
import com.google.inject.servlet.RequestScoped;

/**
 * エントランス画面の為の{@code Action}クラスです。
 * 
 * @author imai78
 *
 */
@RequestScoped
@ActionClass
public class EntranceAction {

	/**
	 * トップで使用する{@link FlashMap}です。
	 */
	@Inject
	private FlashMap flashMap;

	/**
	 * 画面上に表示するアカウント名です。
	 */
	private String aname;

	/**
	 * 画面上に表示するアカウント名を返します。
	 * 
	 * @return 画面上に表示するアカウント名
	 */
	public String getAname() {
		return aname;
	}

	/**
	 * {@code Session}を操作する為の{@link HttpServletRequest}です。
	 * TODO もっと効率の良い方法があるようにも思うが。。。
	 */
	@Inject
	public HttpServletRequest request;

	/**
	 * 最初にアクセスされた際のアクション・メソッドです。
	 * 
	 * @return {@code /b/entrance.jsp}
	 * @throws Exception
	 */
	@Accept(RequestMethod.GET)
	public ActionResult index() {
		// ユーザ情報のセットアップ
		UserInfo user = (UserInfo) this.request.getSession().getAttribute(HeyaConstants.SESSION_KEY.USER);
		if (user == null) {
			// Session内に無かった場合、エラー
			this.flashMap.put("notice", "ログインされていないようです。");
		}
		this.aname = user.getAccountName();
		return new Forward("/b/entrance.jsp");
	}

	/**
	 * ログアウトを行われた際のアクション・メソッドです。
	 * 
	 * @return {@code /}
	 */
	@Accept(RequestMethod.POST)
	public ActionResult logout() {
		UserInfo user = (UserInfo) this.request.getSession().getAttribute(HeyaConstants.SESSION_KEY.USER);
		if (user == null) {
			// Session内に無かった場合、エラー
			this.flashMap.put("notice", "ログインされていないようです。");
		}
		this.request.getSession().removeAttribute(HeyaConstants.SESSION_KEY.USER);
		return new Redirect("/");
	}

}
